package Metier.Controleurs;

import Donnees.DaoLotVitrine;
import Donnees.DaoProduit;
import Donnees.DaoStat;
import Donnees.DaoStock;
import Metier.Objets.LotCuisson;
import Metier.Objets.LotVitrine;
import Metier.Objets.Produit;
import Metier.Objets.Stat;
import Metier.Objets.TypeProduit;
import Presentation.FenetrePrincipale;
import Presentation.Onglet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class GestionVueSynthetique {

    /**
     * Attributs
     */
    private final ResourceBundle configBundle;
    private final Onglet onglet;
    
    /**
     * Constructeur par défaut
     */
    public GestionVueSynthetique() {
        this.onglet = null;
        this.configBundle = ResourceBundle.getBundle("ressources/VueSynthetique/Vue", Locale.FRENCH);
    }
    
    /**
     * Constructeur avec référence à l'onglet appelant
     * @param onglet
     */
    public GestionVueSynthetique(Onglet onglet) {
        this.onglet = onglet;
        if (onglet == null) {
            this.configBundle = ResourceBundle.getBundle("ressources/VueSynthetique/Vue", Locale.FRENCH);
        } else {
            this.configBundle = ResourceBundle.getBundle("ressources/VueSynthetique/Vue", onglet.getFP().getLocale());
        }
    }
    
    /**
     * Fonction servant à obtenir le contenu de la JTable principale de l'onglet Vue synthétique
     * @return
     */
    public TableModel getContenuTableauGeneral() {
        DefaultTableModel tableModel = new DefaultTableModel();
        //En-têtes des colonnes
        tableModel.addColumn(configBundle.getString("vue.Produit"));
        tableModel.addColumn(configBundle.getString("vue.qteStock"));
        tableModel.addColumn(configBundle.getString("vue.cuitsAujd"));
        tableModel.addColumn(configBundle.getString("vue.enCuisson"));
        tableModel.addColumn(configBundle.getString("vue.enVitrine"));
        tableModel.addColumn("+ "+configBundle.getString("vue.vendus")+" +");
        tableModel.addColumn("- "+configBundle.getString("vue.jetes")+" -");
        tableModel.addColumn(configBundle.getString("vue.recetteParProduit"));
        Object[] rowdata = new Object[8];
        try {
            //Initialisation des différentes listes nécessaires à la construction du tableau
            List<Produit> listProduits = new DaoProduit().chercher();
            //List<Commande> listCommandes = new DaoVente().chercherVentesParDate(new Date());
            //List<Perte> listPertes = new DaoPerte().chercherPertesParDate(new Date());
            List<LotVitrine> listVitrine = new DaoLotVitrine().chercher();
            //List<LotCuisson> listCuissonsArchivees = new DaoLotCuisson().chercher(new Date());
            Set<Stat> listStat = DaoStat.getStatDate(new GregorianCalendar(),Calendar.DATE);
            Object[] current = new Object[4];

            for (Produit p : listProduits) {
                current[0] = null;
                for(Stat stat : listStat){
                    if(((String)(stat.toVector()[0])).equals(p.getNom())){
                        current = stat.toVector();
                    }
                }
                
                int cuitsCeJour = 0;
                int venteJour = 0;
                int perteJour = 0;
                
                if(current[0] != null){
                    venteJour = (int)current[1];
                    cuitsCeJour = current[2] == null ? 0 : (int)current[2];
                    perteJour = (int)current[3];
                }
                
                int enCuisson = 0;
                for (LotCuisson lc : new GestionCuisson(null).getCuissonsEnCours()) {
                    if (lc.getProduit().getId() == p.getId()) {
                            enCuisson += lc.getQuantite();
                    }
                }
                
                int nbVitrine = 0;
                for (LotVitrine lv : listVitrine) {
                        if (lv.getProduit().getId() == p.getId()) {
                                nbVitrine += lv.getQuantite();
                        }
                }
                
                rowdata[0] = p.getNom();
                rowdata[1] = new GestionStock(onglet).sommeQuantites(new DaoStock().chercherStockParProduit(p));
                rowdata[2] = p.getType() == TypeProduit.BOISSON ? "("+configBundle.getString("vue.boisson")+")" : cuitsCeJour;
                rowdata[3] = enCuisson;
                rowdata[4] = nbVitrine;
                rowdata[5] = venteJour;
                rowdata[6] = perteJour;
                rowdata[7] = p.getPrix() * venteJour + "€";
                
                tableModel.addRow(rowdata);
            }

        } catch (SQLException e) {
                FenetrePrincipale.afficherPopupErreur(configBundle.getString("vue.errChargeVue")+"\n" + e.getMessage());
        }
        return tableModel;

    }
}
